package com.hnust.controller;

import com.hnust.domain.record.CollegeAdminRecord;
import com.hnust.service.CollegeAdminService;
import com.hnust.service.TokenService;
import com.hnust.util.Result;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;
import java.util.Map;

/**
 *创建人：王月阳
 *创建时间：2020/10/6
 *描述：校管理员-院管理员设置模块
 */

@CrossOrigin("*")
@RestController
@RequestMapping("/api/collegeAdmin")
public class CollegeAdminController {

    @Autowired
    private CollegeAdminService collegeAdminService;

    @Autowired
    private TokenService tokenService;


    /**
     *校管理员添加院管理员
     * @param map 前端返回数据（token，collegeAdminRecord）
     */
    @PostMapping("/add")
    public Result<Boolean> addCollegeAdmin(@RequestBody Map<String,Object> map)
    {
        String token=map.get("token").toString();
        JSONObject jsonObject=JSONObject.fromObject(map.get("collegeAdminRecord"));
        CollegeAdminRecord collegeAdminRecord=(CollegeAdminRecord) JSONObject.toBean(jsonObject, CollegeAdminRecord.class);
        collegeAdminRecord.setPassword("12345");
        if(tokenService.verifyToken(token,"校管理员")) {
            try{
                if(collegeAdminService.addCollegeAdmin(collegeAdminRecord)){
                    return new Result<Boolean>(1, "添加院管理员成功", true);
                }else {
                    return new Result<>(0, "添加失败", null);
                }
            }catch (Exception e) {
                return new Result<>(0, "添加失败", null);
            }
        }else {
            return new Result<>(0, "没有权限操作", null);
        }
    }

    /**
     * 点击院管理员设置，返回院管理员信息
     * @param token token信息
     * @return
     */
    @GetMapping("/get")
    public Result<List<CollegeAdminRecord>> getCollegeAdmin(@RequestParam("token")String token)
    {
        //判断token是否正确
        if(tokenService.verifyToken(token,"校管理员")) {
            try {
                //获取service里的院管理员的信息：姓名，账号，密码，所属学院（账号不能重复）
                List<CollegeAdminRecord> collegeAdminRecords=collegeAdminService.getCollegeAdmin();
                //collegeAdminRecords为前端需要的data字段-接口文档
                return new Result<List<CollegeAdminRecord>>(1,"返回系统信息成功",collegeAdminRecords);
            }catch (Exception e) {
                return new Result<List<CollegeAdminRecord>>(0,"返回系统信息失败",null);
            }
        }
        //token不正确，没有校管理员的权限
        else {
            return new Result<List<CollegeAdminRecord>>(0,"没有操作权限,请登录",null);
        }
    }

    /**
     * 点击表格里单个删除院管理员
     * @param map 前端返回数据（token，collegeAdminId）
     * @return
     */
    @PostMapping("/delete")
    public Result<Boolean> deleteCollegeAdmin(@RequestBody Map<String,Object> map)
    {
        String token=map.get("token").toString();
        String collegeAdminId=map.get("collegeAdminId").toString();
        System.out.println("id" + collegeAdminId);
        //验证token是否正确
        if(tokenService.verifyToken(token,"校管理员")) {
            try{
                Boolean result=collegeAdminService.deleteCollegeAdmin(collegeAdminId);
                if(result) {
                    //根据获取到的院管理员的id删除院管理员的信息
                    return new Result<Boolean>(1,"删除操作成功",true);
                }else {
                    //获取id失败，不能删除
                    return new Result<Boolean>(0,"删除操作失败",false);
                }
            }catch (Exception e){
                return new Result<Boolean>(0,"删除系统信息失败",false);
            }
        }
        //token获取失败，没有校管理员的权限
        else {
            return new Result<Boolean>(0,"没有操作权限,请登录",false);
        }
    }

    /**
     * 批量删除院管理员
     * @param map 前端返回数据（token，collegeAdminIds）
     * @return
     */
    @PostMapping("/batchDelete")
    public Result<Boolean> batchDeleteCollegeAdmin(@RequestBody Map<String,Object> map){
        String token=map.get("token").toString();
        JSONArray collegeAdminIds= JSONArray.fromObject(map.get("collegeAdminIds"));

        //验证token是否正确
        if(tokenService.verifyToken(token,"校管理员")) {
            try{
                if(collegeAdminService.bathDeleteCollegeAdmin(collegeAdminIds)) {
                    //获取全部要删除的院管理员的id
                    return new Result<Boolean>(1,"批量删除操作成功",true);
                }else {
                    //id获取失败
                    return new Result<Boolean>(0,"批量删除操作失败",false);
                }
            }catch (Exception e){
                return new Result<Boolean>(0,"批量删除系统信息失败",false);
            }
        }
        //token获取失败，没有校管理员的权限
        else {
            return new Result<Boolean>(0,"没有操作权限,请登录",false);
        }
    }

    /**
     * 点击表格里的编辑院管理员，根据院管理员的id修改账号，密码，姓名
     * @param map 返回前端数据（token，collegeAdminRecord）
     * @return
     */
    @PostMapping("/modify")
    public Result<Boolean> modifyCollegeAdmin(@RequestBody Map<String,Object> map){
        String token=map.get("token").toString();
        JSONObject jsonObject=JSONObject.fromObject(map.get("collegeAdminRecord"));
        CollegeAdminRecord collegeAdminRecord=(CollegeAdminRecord) JSONObject.toBean(jsonObject, CollegeAdminRecord.class);

        //验证token是否正确
        if(tokenService.verifyToken(token,"校管理员")) {
            try{
                if(collegeAdminService.modifyCollegeAdmin(collegeAdminRecord)) {
                    //根据获取到的院管理员的id，修改账号，姓名，密码（id不能修改，账号不能重复）
                    return new Result<Boolean>(1,"修改操作成功",true);
                }else {
                    //对象中存储的id改变或者账号与其他管理员重复，会操作失败
                    return new Result<Boolean>(0,"修改操作失败",false);
                }
            }catch (Exception e){
                return new Result<Boolean>(0,"修改系统信息失败",false);
            }
        }
        //token获取失败，没有校管理员的权限
        else {
            return new Result<Boolean>(0,"没有操作权限,请登录",false);
        }
    }

    @PostMapping("/addNew")
    public Result<Boolean> addCollegeNewAdmin(@RequestBody Map<String,Object> map)
    {
        String token=map.get("token").toString();
        JSONObject jsonObject=JSONObject.fromObject(map.get("collegeAdminRecord"));
        CollegeAdminRecord collegeAdminRecord=(CollegeAdminRecord) JSONObject.toBean(jsonObject, CollegeAdminRecord.class);
        System.out.println(collegeAdminRecord);
        if(tokenService.verifyToken(token,"校管理员")) {
            try{
                if(collegeAdminService.addCollegeAdmin(collegeAdminRecord)){
                    return new Result<Boolean>(1, "添加院管理员成功", true);
                }else {
                    return new Result<>(0, "添加失败", null);
                }
            }catch (Exception e) {
                return new Result<>(0, "添加失败", null);
            }
        }else {
            return new Result<>(0, "没有权限操作", null);
        }
    }

}

